// 定义包路径
package com.lxx.jmb2c.common;

// 导入Lombok的Data注解，自动生成getter、setter、equals、hashCode和toString方法
import lombok.Data;

// 使用Lombok注解简化代码，自动生成getter、setter等方法
@Data
// 定义Result类，用于统一API返回结果格式
public class Result<T> {
    private Integer status;
    // 状态码，表示请求处理的结果状态
    private Integer code;
    // 消息内容，对状态码的文字描述或额外信息
    private String msg;
    // 返回的数据对象，可以是任何类型
    private T data;

    /**
     * 自定义成功结果
     * @param code 状态码
     * @param msg 消息
     * @param data 数据
     * @return Result对象
     */
    // 创建自定义成功结果的静态方法
    public static <T> Result<T> success(Integer status,Integer code, String msg, T data){
        // 创建Result对象实例
        Result<T> result = new Result<>();
        result.setStatus(status);
        // 设置状态码
        result.setCode(code);
        // 设置消息
        result.setMsg(msg);
        // 设置数据
        result.setData(data);
        // 返回Result对象
        return result;
    }

    /**
     * 成功结果（仅带数据）
     * @param data 数据
     * @return Result对象，状态码默认为"200"，消息默认为"成功"
     */
    // 创建带数据的成功结果的静态方法
    public static <T> Result<T> success(T data){
        // 调用三参数的success方法，使用默认状态码和消息
        return success(20000,20000, "success", data);
    }

    /**
     * 成功结果（无数据）
     * @return Result对象，状态码默认为"200"，消息默认为"成功"，数据为null
     */
    // 创建无数据的成功结果的静态方法
    public static <T> Result<T> success(){
        // 调用三参数的success方法，使用默认状态码和消息，数据为null
        return success(20000,20000, "success", null);
    }

    /**
     * 自定义错误结果
     * @param code 错误状态码
     * @param msg 错误消息
     * @return Result对象，数据为null
     */
    // 创建自定义错误结果的静态方法
    public static <T> Result<T> error(Integer status,Integer code, String msg){
        // 创建Result对象实例
        Result<T> result = new Result<>();
        result.setStatus(status);
        // 设置错误状态码
        result.setCode(code);
        // 设置错误消息
        result.setMsg(msg);
        // 设置数据为null
        result.setData(null);
        // 返回Result对象
        return result;
    }

    /**
     * 默认错误结果
     * @return Result对象，状态码默认为"-1"，消息默认为"失败"，数据为null
     */
    // 创建默认错误结果的静态方法
    public static <T> Result<T> error(){
        // 调用success方法，使用默认错误状态码和消息，数据为null
        return success(-1,-1, "error", null);
    }
}
